#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
一、基础编程题
1.编写程序，在主函数中调用函数，计算字符串中某指定子串出现的次数。
要求：使用指向字符串和要查找的子串的指针，返回次数。例如：字符串为asdfasfasfdadfa，字串as，返回结果为3。
（1）程序分析设计思路（使用标准流程图符号完成流程图）

（2）源代码（不能截图，只能复制粘贴）

（3）运行结果截图（只截取相应运行结果截图）
asdfasfasfdadfa，字串as
abbbcderbbc
bbc


int zgq (const char *x, const char*y )
{
	char* start = x;
	char* ser = y;
	char* p = x;
	int count = 0;
	while (*p)
	{
		start = p;
		ser = y;
		while(*start != '/0' && *start != '\0' && *start == *ser)
		{
			start++;
			ser++;
		}
		if (*ser == '\0')
		{
			count++;
		}
		p++;
	}
	return count;
}
int main()
{
	char add[100] = "asdfasfasfdadfa";
	char arr[100] = "as";
	
	int ret = zgq(add, arr);
	printf("查找的字符串次数为%d\n", ret);
	return 0;
}


2.编写程序，在主函数中调用函数，完成求方阵m主对角线元素之和及次对角线元素之和。要求使用地址访问元素值完成计算。
（1）程序分析设计思路（使用标准流程图符号完成流程图）

（2）源代码（不能截图，只能复制粘贴）

（3）运行结果截图（只截取相应运行结果截图）

方阵m主对角线元素之和及次对角线元素之和
1 2 3
4 5 6
7 8 9
void zgq(int (*p)[3], int n, int*pc, int*pt)
{
	*pc = 0;
	*pt = 0;
	
	for (int i = 0; i < n; i++)
	{
		*pc += p[i][i];
		*pt += p[i][n - 1 - i];
	}
	
}
int main()
{
	int add[3][3] = { 0 };
	int i = 0, j = 0;

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			scanf("%d", &add[i][j]);
		}
	}
	int pc = 0;
	int pt = 0;
	zgq(add, 3, &pc, &pt);
	printf("主对角线和%d\n", pc);
	printf("副对角线和%d\n", pt);
	return 0;
}

3.编写程序，完成删除字符串中所有空格的功能，要求用指针实现，在主函数中输入字符串，调用该函数删除空格后输出。
（1）程序分析设计思路（使用标准流程图符号完成流程图）

（2）源代码（不能截图，只能复制粘贴）

（3）运行结果截图（只截取相应运行结果截图）
void zgq(char*str)
{
	char* pc = str;
	char* pt = str;
	while (*pc)
	{
		if (*pc != ' ')
		{
			*pt = *pc;
			pt++;
		}
		pc++;
	}
	*pt = '\0';
}
int main()
{
	char add [100] = {0};
	gets(add);
	zgq(add);
	printf("%s", add);
	return 0;
}

二：拓展编程题
1.字符串排序：输入五个字符串，按由小到大的顺序输出。使用指针，试编写相应程序。
输入输出示例
black yellow red black green
black
blue
green
red
yellow
void zgq(char *p1, char* p2, char* p3, char* p4, char* p5 )
{
	char* str[] = { p1, p2, p3, p4, p5 };
	int sz = sizeof(str) / sizeof(str[0]);//5
	int i = 0;
	排序算(可以理解为打擂台，最后的擂主为最小，排左边，依次打擂)
	for (i=0;i<sz-1;i++)
	{
		int minte = i;//存一个初始的元素
		for (int j = i + 1; j < sz; j++)
		{
			if (strcmp(str[j], str[minte]) < 0)
			{
				minte = j;
			}
			
		}
		交换
		char* tmp = str[i];
		str[i] = str[minte];
		str[minte] = tmp;

	}
	输出
	for (i=0;i<sz;i++)
	{
		printf("%s\n", str[i]);
	}

}

int main()
{
	输入：
	char add1[] = "black";
	char add2[] = "yellow";
	char add3[] = "red";
	char add4[] = "green";
	char add5[] = "blue";
	
	计算：
	zgq(add1, add2, add3, add4, add5);


		return 0;
}